#ifndef _CONFIG_H
#define _CONFIG_H

#include "stdint.h"

/********************************************************************************************
* 系统时钟
********************************************************************************************/
#define HXTAL_SEL_EN        (0)             //外部晶振选择使能
#define HXTAL_VALUE     	(8000000u)      //外部时钟源晶振频率
#define SYSTEM_CORE_CLOCK   (72000000u)

/********************************************************************************************
* 存储管理
********************************************************************************************/
#define RAM_START_ADD     (0X20000000)
#define RAM_SIZE          (0X02000)

#define FLASH_START_ADD   (0X08000000)
#define FLASH_SIZE        (0X10000)

#define MCU_64ID_ADD      (0X1FFFF7E8)

/********************************************************************************************
* FLASH操作接口
********************************************************************************************/
#define flash_unlock()  fmc_unlock()
#define flash_lock()    fmc_lock()
#define flash_ready()   fmc_flag_clear(FMC_FLAG_BANK0_END|FMC_FLAG_BANK0_WPERR|FMC_FLAG_BANK0_PGERR)
#define flash_check_word_write(add,wU32) (FMC_READY!=fmc_word_program(add,wU32))
#define flash_check_halfword_write(add,wU16) (FMC_READY!=fmc_halfword_program(add,wU16))
#define flash_check_byte_write(add,wU8)  (1)
#define flash_check_page_erase(add)      (FMC_READY!=fmc_page_erase(add))
#define flash_protection(en)  {fmc_unlock();ob_unlock();ob_erase(); \
             ob_security_protection_config((en?FMC_USPC:FMC_NSPC)); \
                              ob_lock();fmc_lock();}


/********************************************************************************************
* 芯片防复制，读保护
********************************************************************************************/
#define SECURITE_PROTECT_LEVEL (0) //0：关闭保护  1：开启flash读保护  2：关闭SWJ调试接口

/********************************************************************************************
* 看门狗
********************************************************************************************/
#define WATCH_DOG_EN       (0)

/********************************************************************************************
* debug 通信串口
********************************************************************************************/
#define DEBUG_COM_UART_EN       (1)
#if (DEBUG_COM_UART_EN == 1)
#define DEBUG_UART_ID           0
#define DEBUG_UART_BAUD    	    (115200)
#endif

/********************************************************************************************
* wifi 通信串口
********************************************************************************************/
#define WIFI_COM_UART_EN        (1)
#if (WIFI_COM_UART_EN == 1)
#define WIFI_UART_ID            1
#define WIFI_UART_BAUD    	    (115200)
#endif

/********************************************************************************************
* 主程序 通信串口 使用
********************************************************************************************/
#define IS_USE_UART(id)   (((1==DEBUG_COM_UART_EN)&&(DEBUG_UART_ID==id)) \
                             ||((1==WIFI_COM_UART_EN)&&(WIFI_UART_ID==id)))	

#endif